import { mysqlTable, varchar, timestamp, bigint } from 'drizzle-orm/mysql-core'
import * as z from 'zod'
import { createInsertSchema } from 'drizzle-zod'
import { stringValidation } from '../config/zod'

// 角色表定义
export const rolesTable = mysqlTable('role', {
  id: bigint('id', { mode: 'bigint' }).autoincrement().primaryKey(),
  name: varchar({ length: 50 }).notNull(), // 权限中文名称
  value: varchar({ length: 50 }).notNull(), // 权限标识
  remark: varchar({ length: 255 }).notNull(), // 描述
  createdAt: timestamp('created_at', { mode: 'date' }).defaultNow().notNull(),
  updatedAt: timestamp('updated_at', { mode: 'date' }).defaultNow().onUpdateNow().notNull()
})

// 使用 drizzle-zod 创建基础插入 schema
const baseInsertSchema = createInsertSchema(rolesTable, {
  name: stringValidation('角色名称', 50),
  value: stringValidation('角色标识', 50),
  remark: stringValidation('角色描述', 255)
})

// 创建角色 Schema (新建)
export const createRoleSchema = baseInsertSchema.omit({
  id: true,
  createdAt: true,
  updatedAt: true
})

// 更新角色 Schema
export const updateRoleSchema = baseInsertSchema
  .omit({
    id: true,
    createdAt: true,
    updatedAt: true
  })
  .partial()

// 角色列表查询 Schema / 角色选择器 Schema (用于下拉选择)
export const rolesListQuerySchema = z.object({
  page: z.coerce.number().min(1).default(1),
  limit: z.coerce.number().min(1).max(100).default(10),
  name: z.string().optional(),
  sortBy: z.string().default('createdAt')
})
